/**
 * 导入类型声明
 */
import type { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios';

/**
 * 拓展自定义请求配置
 */
export interface ExpandAxiosRequestConfig<D = any> extends AxiosRequestConfig<D> {
  /**
   * 拓展拦截器
   */
  interceptorHooks?: InterceptorHooks;

  /**
   * 拓展请求配置
   */
  requestOptions?: {
    /**
     * 是否全局展示请求 错误信息
     */
    globalErrorMessage?: boolean;

    /**
     * 是否全局展示请求 成功信息
     */
    globalSuccessMessage?: boolean;
  };
}

/**
 * 拓展 axios 请求配置
 */
export interface ExpandInternalAxiosRequestConfig<D = any> extends InternalAxiosRequestConfig<D> {
  /**
   * 拓展拦截器
   */
  interceptorHooks?: InterceptorHooks;

  /**
   * 拓展请求配置
   */
  requestOptions?: {
    /**
     * 是否全局展示请求 错误信息
     */
    globalErrorMessage?: boolean;

    /**
     * 是否全局展示请求 成功信息
     */
    globalSuccessMessage?: boolean;
  };
}

/**
 * 拓展 axios 返回配置
 */
export interface ExpandAxiosResponse<T = any, D = any> extends AxiosResponse<T, D> {
  config: ExpandInternalAxiosRequestConfig<D>;
}

/**
 * 定义拦截器
 */
export interface InterceptorHooks {
  /**
   * 请求拦截器
   * @param config
   * @returns
   */
  requestInterceptor?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig;

  /**
   * 请求异常拦截器
   * @param error
   * @returns
   */
  requestInterceptorCatch?: (error: any) => any;

  /**
   * 返回拦截器
   * @param response
   * @returns
   */
  responseInterceptor?: (response: AxiosResponse) => AxiosResponse | Promise<AxiosResponse>;

  /**
   * 返回异常拦截器
   * @param error
   * @returns
   */
  responseInterceptorCatch?: (error: any) => any;
}
